#函数
"""
1.可变与不可变参数
2.必须参数
3.关键词参数
4.默认参数
5.不定长参数

"""


def test(msg,msg2):
    print(msg,msg2)

test("sgssg",1)

#不可变对象参数  (使用c语言的局部变量来理解)
def change(a):
    print("传入的a",a)
    a = 10
    print("被赋值的a",id(a))
    print("被赋值的a的值",a)
a = 1
print("调用前的a",id(a))
change(a)
print(a)

#可变对象参数（使用c语言传入的指针来理解）
def changeme(m):
    m.append([1,2,3,4])
    print("函数内部的:",m)
    return

m = [1,2,3]
changeme(m)
print("函数外部的：",m)

#必须参数


#关键字参数
def printinfo(name,age):
    print("名字：",name)
    print("年龄：",age)

printinfo("huangxin",24)
printinfo(age=15,name="haungxin")#调整顺序

#默认参数
def printin(name,age=35):
    print("名字：",name)
    print("年龄：",age)

printin("huangxin")#如果有默认参数 传入一个时不会报错

#不定长参数
def printno(arg1,*vartuple):#元祖
    print("输出：")
    print(arg1)
    print(vartuple)
    for var in vartuple:
        print(var)

printno(11,12,15,16)
printno(10)


def printd(arg1,**vartuple):#带关键字的参数 字典
    print("输出：")
    print(arg1)
    print(vartuple)
    for var in vartuple:
        print(var)

printd(11,a=2,b=3)
printd(10)


#匿名函数
def sum1(arg1,arg2):
    return arg1 + arg2
sum = lambda arg1,arg2: arg1+arg2

print("相加后的值：",sum(10,20))